from contents.models import GoodsChannel


def get_categories():
    """
    获取商品分类
    :return: 商品分类数据字典
    """

    # 准备商品分类数据字典
    categories = {}

    # 查询37个频道
    channels = GoodsChannel.objects.order_by('group_id', 'sequence')
    # 遍历37个频道，通过频道可以获取到频道对应的组号
    for channel in channels:
        # 获取到组号（是categories的key）
        group_id = channel.group_id
        # 对频道进行分组
        if group_id not in categories:
            categories[group_id] = {'channels': [], 'sub_cats': []}

        # 填充每组的频道数据
        # 获取频道对应的一级类别，方便获取到name
        cat1 = channel.category
        categories[group_id]['channels'].append({
            "id": channel.id,  # 频道编号
            "name": cat1.name,  # 频道关联的分类的名字
            "url": channel.url  # 频道的广告链接
        })

        # 查询每组中每个频道对应的二级分类
        for cat2 in cat1.subs.all():
            # 使用cat2查询cat3
            sub_cats = []
            for cat3 in cat2.subs.all():
                sub_cats.append({
                    "id": cat3.id,  # 三级分类编号
                    "name": cat3.name  # 三级分类名字
                })

            # 查询每组中二级和三级分类
            categories[group_id]['sub_cats'].append({
                "id": cat2.id,  # 二级分类编号
                "name": cat2.name,  # 二级分类名称
                "sub_cats": sub_cats  # 二级分类底下三级分类
            })

    return categories